enum GAME_OPCODE
{
	CSMSG_NONE,

	CMSG_PING,  // `gate`
	SMSG_PONG,

	SMSG_ERROR,
	SMSG_KICK,

	CMSG_MMORPG_LOGIN,  // `gate`
	SMSG_MMORPG_LOGIN_RESP,
	CMSG_MMORPG_LOGOUT,  // `gate`
	SMSG_MMORPG_LOGOUT_RESP,  // `ignore`

	FLAG_MSG_NEED_LOGIN_ACCOUNT_BEGIN,

	CMSG_CHARACTER_CREATE,  // `game`
	SMSG_CHARACTER_CREATE_RESP,
	CMSG_CHARACTER_DELETE,  // `game`
	SMSG_CHARACTER_DELETE_RESP,
	CMSG_CHARACTER_LIST,  // `game`
	SMSG_CHARACTER_LIST_RESP,
	CMSG_CHARACTER_LOGIN,  // `game`
	SMSG_CHARACTER_LOGIN_RESP,
	CMSG_CHARACTER_LOGOUT,  // `game`
	SMSG_CHARACTER_LOGOUT_RESP,

	FLAG_MSG_NEED_LOGIN_CHARACTER_BEGIN,

	CMSG_RPC_INVOKE_RESP,  // `ignore`
	SMSG_RPC_INVOKE_RESP,  // `ignore`

	SMSG_PLAYER_ENTER_MAP,
	SMSG_PLAYER_LEAVE_MAP,
	SMSG_PLAYER_LOAD_MAP,
	CMSG_PLAYER_LOAD_MAP_FINISH,  // `game`

	CMSG_MOVE_START,
	CMSG_MOVE_STOP,
	CMSG_MOVE_SYNC,
	CMSG_MOVE_TURN_DIR,
	SMSG_OBJECT_RELOCATE,

	CMSG_CHAT_MESSAGE,  // `game,player`
	SMSG_CHAT_MESSAGE,
	SMSG_SYSTEM_MESSAGE,

	CMSG_MAIL,
	SMSG_MAIL,

	SMSG_CREATE_OBJECT,
	SMSG_REMOVE_OBJECT,
	SMSG_VALUE32_UPDATE,
	SMSG_VALUE64_UPDATE,

	CMSG_USE_ITEM,
	SMSG_USE_ITEM_RESP,
	CMSG_DESTROY_ITEM,
	SMSG_DESTROY_ITEM_RESP,
	CMSG_ARRANGE_ITEMS,
	SMSG_ARRANGE_ITEMS_RESP,
	CMSG_SWAP_ITEM,
	SMSG_SWAP_ITEM_RESP,
	CMSG_SPLIT_ITEM,
	SMSG_SPLIT_ITEM_RESP,
	CMSG_EQUIP_ITEM,
	SMSG_EQUIP_ITEM_RESP,
	CMSG_UNEQUIP_ITEM,
	SMSG_UNEQUIP_ITEM_RESP,
	SMSG_CREATE_ITEM,
	SMSG_REMOVE_ITEM,
	SMSG_UPDATE_ITEM,
	SMSG_SWAP_ITEM,
	SMSG_ARRANGE_ITEMS,
	SMSG_ADD_ITEM_COUNT,
	SMSG_SUB_ITEM_COUNT,
	SMSG_GET_ITEM_POPMSG,

	CMSG_ENTER_QUEST_GUIDE,
	SMSG_ENTER_QUEST_GUIDE_RESP,
	CMSG_QUERY_QUEST_GIVER,
	SMSG_QUERY_QUEST_GIVER_RESP,
	CMSG_ACCEPT_QUEST,
	SMSG_ACCEPT_QUEST_RESP,
	CMSG_CANCEL_QUEST,
	SMSG_CANCEL_QUEST_RESP,
	CMSG_SUBMIT_QUEST,
	SMSG_SUBMIT_QUEST_RESP,
	SMSG_CREATE_QUEST,
	SMSG_REMOVE_QUEST,
	SMSG_UPDATE_QUEST,
	SMSG_SUBMIT_QUEST,
	SMSG_QUEST_FINISH,
	SMSG_QUEST_FAILED,
	SMSG_UPDATE_QUEST_WATCH_STATUS,
	CMSG_QUERY_QUEST_NAVIGATION,
	SMSG_QUERY_QUEST_NAVIGATION_RESP,

	CMSG_OBJECT_INTERACTIVE,
	CMSG_PLAYER_REVIVE,

	SMSG_CHANGE_TARGET,
	SMSG_COMBAT_STATUS,
	SMSG_UNIT_DEAD,
	SMSG_UNIT_REVIVE,

	SMSG_UNIT_STRIKE,
	SMSG_UNIT_HURT,
	SMSG_UNIT_LOSE_HP,
	SMSG_UNIT_TREAT_HP,

	CMSG_SPELL_CAST,
	SMSG_SPELL_CAST_RESP,
	CMSG_SPELL_INTERRUPT,
	SMSG_SPELL_INTERRUPT_RESP,
	SMSG_SPELL_SYNC_CHANT,
	SMSG_SPELL_SYNC_CHANNEL,
	SMSG_SPELL_SYNC_CLEANUP,
	SMSG_SPELL_SYNC_STOP,

	SMSG_SPELL_COOLDOWN,
	SMSG_SPELL_REMOVE_COOLDOWN,

	SMSG_SPELL_SYNC_BUFF_INFO,

	SMSG_LOC_TELEPORT,
	SMSG_LOC_TELEPORT_FINISH,
	CMSG_LOC_TELEPORT_FINISH,

	SMSG_UNIT_START_MOVE,
	SMSG_UNIT_SYNC_MOVE,
	SMSG_UNIT_STOP_MOVE,
	SMSG_UNIT_CHANGE_MOVE,
	SMSG_UNIT_START_TURN,
	SMSG_UNIT_SYNC_TURN,
	SMSG_UNIT_STOP_TURN,

	CMSG_TEAM_CREATE,  // `game`
	SMSG_TEAM_CREATE_RESP,
	CMSG_TEAM_INVITE,  // `game`
	SMSG_TEAM_INVITE,
	CMSG_TEAM_INVITE_RESP,  // `game`
	SMSG_TEAM_INVITE_RESP,
	CMSG_TEAM_APPLY,  // `game`
	SMSG_TEAM_APPLY,
	CMSG_TEAM_APPLY_RESP,  // `game`
	SMSG_TEAM_APPLY_RESP,
	CMSG_TEAM_LEAVE,  // `game`
	SMSG_TEAM_LEAVE_RESP,
	CMSG_TEAM_KICK,  // `game`
	SMSG_TEAM_KICK_RESP,
	CMSG_TEAM_TRANSFER,  // `game`
	SMSG_TEAM_TRANSFER_RESP,
	SMSG_TEAM_INFO,
	SMSG_TEAM_SYNC_INFO,
	SMSG_TEAM_MEMBER_ADD,
	SMSG_TEAM_MEMBER_QUIT,
	SMSG_TEAM_MEMBER_ONLINE,
	SMSG_TEAM_MEMBER_OFFLINE,
	SMSG_TEAM_LEADER_CHANGE,
	SMSG_TEAM_DISBAND,

	CMSG_GUILD_CREATE,  // `game`
	SMSG_GUILD_CREATE_RESP,
	CMSG_GUILD_INVITE,  // `game`
	SMSG_GUILD_INVITE,
	CMSG_GUILD_INVITE_RESP,  // `game`
	SMSG_GUILD_INVITE_RESP,
	CMSG_GUILD_APPLY,  // `game`
	SMSG_GUILD_APPLY,
	CMSG_GUILD_APPLY_RESP,  // `game`
	SMSG_GUILD_APPLY_RESP,
	CMSG_GUILD_LEAVE,  // `game`
	SMSG_GUILD_LEAVE_RESP,
	CMSG_GUILD_KICK,  // `game`
	SMSG_GUILD_KICK_RESP,
	CMSG_GUILD_RISE,  // `game`
	SMSG_GUILD_RISE_RESP,
	CMSG_GUILD_DISBAND,  // `game`
	SMSG_GUILD_DISBAND_RESP,
	CMSG_GUILD_GET_LIST,  // `guild`
	SMSG_GUILD_GET_LIST_RESP,
	CMSG_GUILD_GET_INFO,  // `guild`
	SMSG_GUILD_GET_INFO_RESP,
	CMSG_GUILD_GET_MEMBER,  // `guild`
	SMSG_GUILD_GET_MEMBER_RESP,
	CMSG_GUILD_GET_APPLY,  // `game`
	SMSG_GUILD_GET_APPLY_RESP,

	CMSG_RANK_GET_PLAYER_LIST,  // `rank`
	SMSG_RANK_GET_PLAYER_LIST_RESP,
	CMSG_RANK_GET_GUILD_LIST,  // `rank`
	SMSG_RANK_GET_GUILD_LIST_RESP,

	CMSG_GET_SHOP_ITEM_LIST,  // `game,player`
	SMSG_GET_SHOP_ITEM_LIST_RESP,
	CMSG_BUY_SHOP_ITEM,
	SMSG_BUY_SHOP_ITEM_RESP,
	CMSG_BUY_SPECIAL_SHOP_ITEM,  // `game`
	SMSG_BUY_SPECIAL_SHOP_ITEM_RESP,

	CMSG_OPERATING_GET_TYPE,  // `operating`
	SMSG_OPERATING_GET_TYPE_RESP,
	CMSG_OPERATING_GET_LIST,
	SMSG_OPERATING_GET_LIST_RESP,
	CMSG_OPERATING_GET_DETAIL,
	SMSG_OPERATING_GET_DETAIL_RESP,
	CMSG_OPERATING_GET_SHORT_HOT,
	SMSG_OPERATING_GET_SHORT_HOT_RESP,
	CMSG_OPERATING_BUY,
	SMSG_OPERATING_BUY_RESP,
	CMSG_OPERATING_GET_REWARD,
	SMSG_OPERATING_GET_REWARD_RESP,
	SMSG_OPERATING_GET_REWARD_RESP_CONTINUE,
	SMSG_OPERATING_DETAIL_DIRTY,
	SMSG_OPERATING_LIST_DIRTY,

	CMSG_START_STORY_MODE,
	SMSG_PLAY_TIPS,

	SMSG_UPDATE_NAV_PHYSICS_FLAGS,

	CMSG_PLAYBOSS_JOIN,  // `game`
	SMSG_PLAYBOSS_RANK,

	CSMSG_COUNT
}